package Forms;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import Model.Professor;

public class ProfessorTableModel extends AbstractTableModel {

	private static final long serialVersionUID = 1L;
	
	private static final int COL_ID = 0;
	private static final int COL_NOME = 1;
	private static final int COL_CPF = 2;
	private static final int COL_EMAIL = 3;
	private static final int COL_TITU = 4;
	private static final int COL_DATA = 5;
	private List<Professor> linhas;
	private String[] colunas = new String[]{"ID", "NOME", "CPF", "STATUS", "TITULO", "NASCIMENTO"};

	/**
	 * Construtor que recebe a lista e cria uma tabela.
	 **/
	public ProfessorTableModel(List<Professor> contatos) {
		this.linhas = new ArrayList<>(contatos);
	}

	public int getRowCount() {
		return linhas.size();
	}

	public int getColumnCount() {
		return colunas.length;
	}

	public String getColumnName(int columnIndex) {
		return colunas[columnIndex];
	}

	public Class getColumnClass(int columnIndex) {
		if (columnIndex == COL_ID) {
			return Integer.class;
		}
		return String.class;
	}

	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}

	public Object getValueAt(int row, int column) {

		Professor m = linhas.get(row);

		if (column == COL_ID) {
			return m.getCodigo();
		} else if (column == COL_NOME) {
			return m.getNomeProfessor();
		} else if (column == COL_CPF) {
			return m.getCpfProfessor();
		} else if (column == COL_EMAIL) {
			return m.getStatus();
		} else if (column == COL_TITU) {
			return m.getTitulo();
		} else if (column == COL_DATA) {
			return m.getNascimento();
		}
		
		return "";
	}
	
	/**
	 * 
	 **/
	public void setValueAt(Object aValue, int row, int column) {
		Professor u = linhas.get(row);
		if (column == COL_ID) {
			u.setCodigo((String) aValue);
		} else if (column == COL_NOME) {
			u.setNomeProfessor(aValue.toString());
		} else if (column == COL_CPF) {
			u.setCpfProfessor(aValue.toString());
		} else if (column == COL_EMAIL) {
			u.setStatus(aValue.toString());
		} else if (column == COL_DATA) {
			u.setNascimento(aValue.toString());
		} else if (column == COL_TITU) {
			u.setTitulo(aValue.toString());
		}
	}

	public Professor getContato(int indiceLinha) {
		return linhas.get(indiceLinha);
	}

	public void clear() {
		linhas.clear();
	}
	
	public int procurarIndiceLista(Professor objeto) {
		int x = -1;
		boolean boo = true;
		
		for (int i=0;i<linhas.size() && boo;i++) {
			Professor prof = linhas.get(i);
			boo = !(prof.getCodigo().equals(objeto.getCodigo()));
			x = i; // paga o ultimo valor de i
		}
		
		if(!boo) {
			return x;
		} else {
			return -2;
		}
	}
	
	public void addContato(Professor contato) {
		linhas.add(contato);
		int ultimoIndice = getRowCount() - 1;
		fireTableRowsInserted(ultimoIndice, ultimoIndice);

	}

	public void updateContato(Professor objeto) {
		int indiceLinha = procurarIndiceLista(objeto);
		linhas.set(indiceLinha, objeto);
		fireTableRowsUpdated(indiceLinha, indiceLinha);

	}

	public void removeContato(Professor objeto) {
		int indiceLinha = procurarIndiceLista(objeto);
		linhas.remove(indiceLinha);
		fireTableRowsDeleted(indiceLinha, indiceLinha);

	}
}
